package com.zpark.controller;

import com.zpark.entity.User;
import com.zpark.util.JsonData;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @PackageName: com.zpark.controller
 * @ClassName: UserController
 * @Description:
 * @author: RZS
 * @date: 2024/4/29  10:46
 */
@RestController
@RequestMapping("/user")
/**
 * 用在请求的类上，表示对类的说明
 * tags="说明该类的作用，可以在UI界面上看到的注解"
 * value="该参数没什么意义，在UI界面上也看到，所以不需要配置"
 */
@Api(tags = "用户服务接口")
public class UserController {

    /**
     * @ApiOperation 用在请求的方法上，说明方法的用途、作用
     * value="说明方法的用途、作用"
     * notes="方法的备注说明"
     * @ApiImplicitParams：用在请求的方法上，表示一组参数说明
     * @ApiImplicitParam：用在@ApiImplicitParams注解中，指定一个请求参数的各个方面
     *      name：参数名
     *      value：参数的汉字说明、解释
     *      required：参数是否必须传
     *      paramType：参数放在哪个地方
     *          header --> 请求参数的获取：@RequestHeader
     *          query --> 请求参数的获取：@RequestParam
     *          path（用于restful接口）--> 请求参数的获取：@PathVariable
     *          body（不常用）
     *          from（不常用）
     *      dataType：参数类型，默认String，其它值dataType="Integer"
     *      defaultValue：参数的默认值
     */
    @GetMapping("/find_id/{id}")
    @ApiOperation("根据ID查询数据")
    @ApiImplicitParam(name = "id", value = "用户ID", required = true, paramType = "path",
    dataType = "Integer", defaultValue = "1")
    public JsonData<User> findId(@PathVariable Integer id){
        User user = new User();
        user.setId(id);
        user.setUsername("大锤");
        user.setPassword("123456");

        return new JsonData<>(2000, "OK", user);
    }

    @ApiOperation("查询所有用户数据")
    @GetMapping("/all")
    public JsonData<List<User>> findAll(){
        List<User> lists = new ArrayList<>();
        lists.add(new User(12, "张三", "789789"));
        lists.add(new User(13, "张三2", "789789"));
        lists.add(new User(14, "张三3", "789789"));
        lists.add(new User(15, "张三4", "789789"));

        return new JsonData<>(2000, "OK", lists);
    }

    // 添加用户
    @ApiOperation("添加用户数据")
    @PostMapping("/add")
    @ApiImplicitParam(name = "user", value = "用户对象", required = true, dataTypeClass = User.class)
    public JsonData<User> addUser(@RequestBody User user){
        return  new JsonData<>(2000, "OK", user);
    }

    // 用户登录
    @ApiOperation("用户登录接口")
    @PostMapping("/login")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "uname", value = "用户名", dataType = "String", required = true),
            @ApiImplicitParam(name = "pwd", value = "用户密码", dataType = "String", required = true)
    })
    public JsonData<String> login(String uname, String pwd){
        return new JsonData<>(2000, "OK", uname + " - " + pwd);
    }


}
